

//找到第一个出现一次的字符
#include <iostream>
#include <vector>
#include <string>
#include <unordered_map>

// class Solution {
// public:
//     static char dismantlingAction(std::string arr) 
//     {
//         //哈希表
//         std::vector<int> hash(26, 0);
//         //上一次字符
//         int prev_pos = -1;
//         for(int i = 0; i < arr.size(); i++)
//         {
//             //存储的位置
//             int pos = arr[i] - 'a';
//             //直接存储
//             if(i == 0)
//             {
//                 hash[pos]++;
//                 prev_pos = pos;
//                 continue;
//             }
//             //判断--如果和上次的字符不一样，同时上次字符只有一个
//             if(pos != prev_pos && hash[prev_pos] == 1)
//             {
//                 return 'a' + prev_pos;
//             }
//             else
//             {
//                 hash[pos]++;
//                 prev_pos = pos;
//             }
//         }
//         return ' ';
//     }
// };


class Solution {
public:
    char dismantlingAction(std::string arr) {
        //不在hash里面代表没有出现过，在里面为true表示一次，在里面为false表示多次出现
        std::unordered_map<char, bool> hash;
        //遍历--第一次出现为true，以后出现为false
        for(auto ch : arr)
        {
            //如果找到了就不是第一次，没找到就是第一次
            hash[ch] = hash.find(ch) == hash.end();
        }
        //按arr顺序遍历，查看第一个出现一次的元素
        for(auto ch : arr)
        {
            if(hash[ch] == true)
                return ch;
        }
        return ' ';
    }
};